package com.zch.starter.opentelemetry.code.mode.springboot.starter.utils;

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import io.opentelemetry.api.baggage.Baggage;

/**
 * opentelemetry 自定义标签 输出到日志模板上
 * 1 ClassicConverter 是 Logback 日志框架中的核心组件，“专门用于自定义日志输出格式”
 * 2 BaggageLogbackConverter 是借助opentelemetry 的上下文变量，取出上下文变量进行日志输出
 */
public class BaggageLogbackConverter extends ClassicConverter {
    @Override
    public String convert(ILoggingEvent event) {
        // 获取转换器配置的选项（logback.xml中%baggage{xxx}的xxx部分）
        String keyOption = getFirstOption(); // 直接获取{}内的内容
        if (keyOption == null) {//根据xxx 直接从map 里获取value
            return "null";
        }
        return Baggage.current().getEntryValue(keyOption)==null ? "null" : Baggage.current().getEntryValue(keyOption);
    }
}
